package github.ziwukun.jsonql.lang;

import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.StrUtil;

/**
 * 排序字段关键字符号
 * @author Hugo.Yu
 */
public enum SortSym implements AtWord{
	/**
	 * 降序排列
	 */
	DESC("@desc"),
	/**
	 * 升序排列
	 */
	ASC("@asc");
	
	SortSym(String atKey){
		this.atKey = atKey;
	}
	String atKey;
	
	/**
	 * 判断字符串是否是排序关键字</br>
	 * @return
	 */
	public static boolean isSortSym(String key) {
		// 空字符串永远为false
		if(StrUtil.isBlank(key)) {
			return false;
		}
		
		// 去除@
		if(key.startsWith("@")) {
			key = key.substring(1,key.length());
		}
		
		return EnumUtil.contains(SortSym.class, key.toUpperCase());
	}
	
	/**
	 * 字符串转枚举，字符串包含@符号也可，忽略大小写
	 * @param key
	 * @return
	 */
	public static SortSym valOf(String key) {
		// 空字符串永远为false
		if (StrUtil.isBlank(key)) {
			throw new RuntimeException("字符串转Condition枚举失败，字符串不能为空");
		}
		if(!key.startsWith("@")) {
			throw new RuntimeException("条件JSON"+key+"必须以@字符开头");
		}
		// 去除@
		key = key.substring(1, key.length());
		
		return EnumUtil.fromString(SortSym.class, key.toUpperCase());
	}

	@Override
	public String atWord() {
		return atKey;
	}
}
